package br.com.jmed.control;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;

import br.com.jmed.model.Convenio;
import br.com.jmed.model.Hospital;
import br.com.jmed.model.Medico;
import br.com.jmed.model.Paciente;
import br.com.jmed.model.PacienteConvenio;
import br.com.jmed.model.Tipo;
import br.com.jmed.service.CadastrosService;
import br.com.jmed.service.PacienteService;

@ManagedBean(name="cadastroControl")
@SessionScoped
public class CadastroControl extends BaseControl implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@EJB
	private PacienteService pacienteService;
	
	@EJB
	private CadastrosService cadastroService;
	
	@Inject
	private Paciente paciente;
	
	@Inject
	private PacienteConvenio pacienteConvenio;
	
	@Inject
	private Convenio convenio;
	
	@Inject
	private Medico medico;
	
	@Inject
	private Hospital hospital;
	
	private List<Hospital> hospitalList;
	
	private List<Convenio> conveniosList;

	private List<Tipo> tipoOcorrenciaList;
	
	public void setPacienteService(PacienteService pacienteService) {
		this.pacienteService = pacienteService;
	}

	public Paciente getPaciente() {
		return paciente;
	}

	public void setPaciente(Paciente paciente) {
		this.paciente = paciente;
	}
	
	public void salvarCadastroPaciente(){
		paciente.setSituacao("A");
		paciente.setUsuarioInclusao(getUsuario());
		paciente.setDataInclusao(new Date());
		paciente = pacienteService.inserirAlterarPaciente(paciente);
		convenio = cadastroService.findConvenioByCode(convenio.getCodigo());
		pacienteConvenio.setPaciente(paciente);
		pacienteConvenio.setConvenio(convenio);
		pacienteConvenio.setSituacao("A");
		pacienteConvenio.setUsuarioInclusao(getUsuario());
		pacienteConvenio.setDataInclusao(new Date());
		pacienteService.inserirAlterarPacienteConvenio(pacienteConvenio);
		paciente = new Paciente();
		pacienteConvenio = new PacienteConvenio();
		setCadastroOk(true);
	}
	
	public void salvarCadastroMedico(){
		medico.setSituacao("A");
		medico.setUsuarioInclusao(getUsuario());
		medico.setDataInclusao(new Date());
		cadastroService.salvarMedico(medico);
		novoCadastroMedico();
		setCadastroOk(true);
	}
	
	public List<Hospital> findHospitalByCodeOrName(Hospital hospital){
		hospitalList = cadastroService.findHospitalByCodeOrName(hospital.getCodigo(),hospital.getNomeFantasia());
		return hospitalList;
	}
	
	public void pesquisarHospital(){
		hospitalList = findHospitalByCodeOrName(hospital);
	}
	
	public String abrirAlterarHospital(Hospital hospital) {
		this.hospital = hospital;
		return "/pages/hospital/hospitalAlterar.xhtml";
	}
	
	public String novoCadastroHospital() throws IOException {
		this.hospital = new Hospital();
		this.hospitalList = new ArrayList<Hospital>();
		return "/pages/hospital/hospitalIncluir.xhtml";
	}
	
	public String alterarCadastroHospital() throws IOException {
		if(hospital.getUsuarioInclusao() != null) {
			hospital.setUsuarioInclusao(getUsuario());
			hospital.setDataInclusao(new Date());
		}else {
			hospital.setUsuarioAlteracao(getUsuario());
			hospital.setDataAlteracao(new Date());
		}
		cadastroService.atualizarHospital(hospital);
		hospital = new Hospital();
		hospitalList = new ArrayList<Hospital>();
		return "/pages/hospital/hospitalBusca.xhtml";
	}
	
	public List<Convenio> findConvenioByCodeOrName(Convenio convenio){
		conveniosList = cadastroService.findConvenioByCodeOrName(convenio.getCodigo(),convenio.getNomeFantasia());
		return conveniosList;
	}
	
	public void pesquisarConvenio(){
		conveniosList = findConvenioByCodeOrName(convenio);
	}
	
	public String abrirAlterarConvenio(Convenio convenio) {
		this.convenio = convenio;
		return "/pages/convenio/convenioAlterar.xhtml";
	}
	
	public String novoCadastroConvenio() throws IOException {
		this.convenio = new Convenio();
		this.conveniosList = new ArrayList<Convenio>();
		return "/pages/convenio/convenioIncluir.xhtml";
	}
	
	public String alterarCadastroConvenio() throws IOException {
		if(convenio.getUsuarioInclusao() != null) {
			convenio.setUsuarioInclusao(getUsuario());
			convenio.setDataInclusao(new Date());
		}else {
			convenio.setUsuarioAlteracao(getUsuario());
			convenio.setDataAlteracao(new Date());
		}
		cadastroService.atualizarConvenio(convenio);
		convenio = new Convenio();
		conveniosList = new ArrayList<Convenio>();
		return "/pages/convenio/convenioBusca.xhtml";
	}
	
	public void novoCadastroPaciente(){
		paciente = new Paciente();
	}
	
	public void novoCadastroMedico(){
		medico = new Medico();
	}

	public PacienteConvenio getPacienteConvenio() {
		return pacienteConvenio;
	}

	public void setPacienteConvenio(PacienteConvenio pacienteConvenio) {
		this.pacienteConvenio = pacienteConvenio;
	}

	public Convenio getConvenio() {
		return convenio;
	}

	public void setConvenio(Convenio convenio) {
		this.convenio = convenio;
	}

	public List<Convenio> getConveniosList() {
		if(conveniosList == null){
			conveniosList = cadastroService.findAllConvenios();
		}
		return conveniosList;
	}

	public void setConveniosList(List<Convenio> conveniosList) {
		this.conveniosList = conveniosList;
	}

	public void setCadastroService(CadastrosService cadastroService) {
		this.cadastroService = cadastroService;
	}

	public Medico getMedico() {
		return medico;
	}

	public void setMedico(Medico medico) {
		this.medico = medico;
	}

	public List<Hospital> getHospitalList() {
		return hospitalList;
	}

	public void setHospitalList(List<Hospital> hospitalList) {
		this.hospitalList = hospitalList;
	}

	public Hospital getHospital() {
		return hospital;
	}

	public void setHospital(Hospital hospital) {
		this.hospital = hospital;
	}

	public List<Tipo> getTipoOcorrenciaList() {
		tipoOcorrenciaList = cadastroService.findTipoByModelo("OCORRENCIA");
		return tipoOcorrenciaList;
	}

	public void setTipoOcorrenciaList(List<Tipo> tipoOcorrenciaList) {
		this.tipoOcorrenciaList = tipoOcorrenciaList;
	}
	
	
	
	
}
